package arp.analiseprestadores.gui;

import arp.analiseprestadores.FachadaARP;
import arp.analiseprestadores.gui.relatorio.RelatorioConciliacaoPrestadores;
import arp.analiseprestadores.util.Configuracao;
import arp.analiseprestadores.util.ConstantesARP;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import org.apache.log4j.Logger;

/**
 *
 * @author thiago.c.silva
 */
public class ConciliarPlanilhaPanel extends javax.swing.JPanel {
    
    private static final Logger LOGGER = Logger.getLogger(ConciliarPlanilhaPanel.class);
    private File arquivo1;
    private File arquivo2;

    /**
     * Creates new form ConciliarPlanilhaPanel
     */
    public ConciliarPlanilhaPanel() {
        initComponents();
        
        String caminhoDiretorio = Configuracao.getInstancia().getDiretorioRelatorio();
        
        if (caminhoDiretorio != null && !caminhoDiretorio.isEmpty()) {
            tfDiretorio.setText(caminhoDiretorio);
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lbArquivoOrigem = new javax.swing.JLabel();
        tfCaminhoArquivo1 = new javax.swing.JTextField();
        lbArquivoDestino = new javax.swing.JLabel();
        tfCaminhoArquivo2 = new javax.swing.JTextField();
        botaoLocalizarArquivo1 = new javax.swing.JButton();
        botaoLocalizarArquivo2 = new javax.swing.JButton();
        botaoGerarRelatório = new javax.swing.JButton();
        lbDiretorio = new javax.swing.JLabel();
        tfDiretorio = new javax.swing.JTextField();
        botaoSelecionarDiretorio = new javax.swing.JButton();

        lbArquivoOrigem.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        lbArquivoOrigem.setText("Origem");

        tfCaminhoArquivo1.setEnabled(false);

        lbArquivoDestino.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        lbArquivoDestino.setText("Destino");

        tfCaminhoArquivo2.setEnabled(false);

        botaoLocalizarArquivo1.setText("Localizar");
        botaoLocalizarArquivo1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoLocalizarArquivo1ActionPerformed(evt);
            }
        });

        botaoLocalizarArquivo2.setText("Localizar");
        botaoLocalizarArquivo2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoLocalizarArquivo2ActionPerformed(evt);
            }
        });

        botaoGerarRelatório.setText("Gerar Relatório");
        botaoGerarRelatório.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoGerarRelatórioActionPerformed(evt);
            }
        });

        lbDiretorio.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        lbDiretorio.setText("Diretório");

        tfDiretorio.setEnabled(false);

        botaoSelecionarDiretorio.setText("Selecionar");
        botaoSelecionarDiretorio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoSelecionarDiretorioActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(botaoGerarRelatório)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addComponent(lbDiretorio)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(tfDiretorio))
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addComponent(lbArquivoDestino)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(tfCaminhoArquivo2))
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addComponent(lbArquivoOrigem)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(tfCaminhoArquivo1, javax.swing.GroupLayout.PREFERRED_SIZE, 414, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(botaoSelecionarDiretorio)
                            .addComponent(botaoLocalizarArquivo1)
                            .addComponent(botaoLocalizarArquivo2))))
                .addContainerGap(25, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(23, 23, 23)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbArquivoOrigem)
                    .addComponent(tfCaminhoArquivo1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botaoLocalizarArquivo1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbArquivoDestino)
                    .addComponent(tfCaminhoArquivo2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botaoLocalizarArquivo2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbDiretorio)
                    .addComponent(tfDiretorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botaoSelecionarDiretorio))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botaoGerarRelatório)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        lbArquivoOrigem.getAccessibleContext().setAccessibleName("lbArquivo1");
    }// </editor-fold>//GEN-END:initComponents

    private void botaoLocalizarArquivo1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoLocalizarArquivo1ActionPerformed
        final JFileChooser fc = new JFileChooser();

        int returnVal = fc.showOpenDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            arquivo1 = fc.getSelectedFile();

            tfCaminhoArquivo1.setText(arquivo1.getAbsolutePath());
        }
    }//GEN-LAST:event_botaoLocalizarArquivo1ActionPerformed

    private void botaoLocalizarArquivo2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoLocalizarArquivo2ActionPerformed
        final JFileChooser fc = new JFileChooser();

        int returnVal = fc.showOpenDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            arquivo2 = fc.getSelectedFile();

            tfCaminhoArquivo2.setText(arquivo2.getAbsolutePath());
        }
    }//GEN-LAST:event_botaoLocalizarArquivo2ActionPerformed

    private void botaoGerarRelatórioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoGerarRelatórioActionPerformed
        String mensagemErro = "";
        
        if (arquivo1 == null) {
            mensagemErro += ConstantesARP.MSG_ERRO_CAMPO_OBRIGATORIO.replaceAll("#1", lbArquivoOrigem.getText()) + "\n";
        } else {
            String extensao = arquivo1.getName().split("\\.")[arquivo1.getName().split("\\.").length - 1];
            
            if (!ConstantesARP.EXTENSAO_ARQUIVO.equalsIgnoreCase(extensao)) {
                mensagemErro += ConstantesARP.MSG_ERRO_EXTENSAO_ARQUIVO.replaceAll("#1", lbArquivoOrigem.getText()).replaceAll("#2", ConstantesARP.EXTENSAO_ARQUIVO.toUpperCase()) + "\n";
            }            
        }
            
        if (arquivo2 == null) {
            mensagemErro += ConstantesARP.MSG_ERRO_CAMPO_OBRIGATORIO.replaceAll("#1", lbArquivoDestino.getText()) + "\n";
        } else {
            String extensao = arquivo2.getName().split("\\.")[arquivo2.getName().split("\\.").length - 1];
            
            if (!ConstantesARP.EXTENSAO_ARQUIVO.equalsIgnoreCase(extensao)) {
                mensagemErro += ConstantesARP.MSG_ERRO_EXTENSAO_ARQUIVO.replaceAll("#1", lbArquivoDestino.getText()).replaceAll("#2", ConstantesARP.EXTENSAO_ARQUIVO.toUpperCase()) + "\n";
            }            
        }
        
        if (tfDiretorio.getText() == null || tfDiretorio.getText().trim().isEmpty()) {
            mensagemErro += ConstantesARP.MSG_ERRO_CAMPO_OBRIGATORIO.replaceAll("#1", lbDiretorio.getText()) + "\n";
        }
    
        if (mensagemErro.length() > 0) {
            JOptionPane.showMessageDialog(this, mensagemErro, ConstantesARP.MSG_ERRO_GERAR_RELATORIO, JOptionPane.ERROR_MESSAGE);
        } else {
            try {
                FachadaARP.getInstancia().resetarBase();
                FachadaARP.getInstancia().carregarArquivo(arquivo1, true);
                FachadaARP.getInstancia().carregarArquivo(arquivo2, false);
                
                String nomeArquivo = RelatorioConciliacaoPrestadores.gerar();
                
                JOptionPane.showMessageDialog(this, ConstantesARP.MSG_SUCESSO_GERAR_RELATORIO.replaceAll("#1", nomeArquivo), ConstantesARP.MSG_SUCESSO, JOptionPane.INFORMATION_MESSAGE);
                
            } catch (Exception ex) {
                LOGGER.error(ex);
                JOptionPane.showMessageDialog(this, ex.getMessage(), ConstantesARP.MSG_ERRO_GERAR_RELATORIO, JOptionPane.ERROR_MESSAGE);
            }
        }
    }//GEN-LAST:event_botaoGerarRelatórioActionPerformed

    private void botaoSelecionarDiretorioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoSelecionarDiretorioActionPerformed
        final JFileChooser fc = new JFileChooser();
        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

        int returnVal = fc.showOpenDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            tfDiretorio.setText(fc.getSelectedFile().getAbsolutePath());
            
            LOGGER.warn("Atualizar o diretório do relatório para " + tfDiretorio.getText());
            Configuracao.getInstancia().setDiretorioRelatorio(tfDiretorio.getText());
            Configuracao.getInstancia().atualizarDiretorio();
        }
    }//GEN-LAST:event_botaoSelecionarDiretorioActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botaoGerarRelatório;
    private javax.swing.JButton botaoLocalizarArquivo1;
    private javax.swing.JButton botaoLocalizarArquivo2;
    private javax.swing.JButton botaoSelecionarDiretorio;
    private javax.swing.JLabel lbArquivoDestino;
    private javax.swing.JLabel lbArquivoOrigem;
    private javax.swing.JLabel lbDiretorio;
    private javax.swing.JTextField tfCaminhoArquivo1;
    private javax.swing.JTextField tfCaminhoArquivo2;
    private javax.swing.JTextField tfDiretorio;
    // End of variables declaration//GEN-END:variables
}
